package com.wsoft.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wsoft.system.dto.TsConfigInfoDto;
import com.wsoft.system.entity.TsConfigInfoEntity;
import com.wsoft.system.query.config.ConfigInfoMemberQuery;
import com.wsoft.system.query.config.ConfigInfoOrgQuery;
import com.wsoft.system.query.config.PersonConfigInfoQuery;
import com.wsoft.system.query.config.TsConfigInfoQuery;
import com.wsoft.vo.config.ConfigRespVO;
import com.wsoft.vo.config.MemberConfigVO;

import java.util.List;

/**
 * <p>
 * 个人配置系统信息表 服务类
 * </p>
 *
 * @author kyle
 * @since 2024年09月01日 08:52:31
 */
public interface ITsConfigInfoService extends IService<TsConfigInfoEntity> {
    /**
     * 新增
     * @param dto
     *  @return boolean
     *
     */
    boolean insert(TsConfigInfoDto dto);

    /**
     * 新增或修改(token)
     * @param query
     * @return
     */
    void insertOrUpdateConfigInfo(TsConfigInfoQuery query);

    /**
     * 修改
     * @param dto
     *  @return boolean
     */
    boolean update(TsConfigInfoDto dto);



    /**
     * 删除
     * @param id
     * @return boolean
     */
    boolean delete(Long id);

    /**
     * 恢复默认
     * @param code
     * @return boolean
     */
    boolean recover(String code);

    /**
     * 全部恢复默认
     * @return boolean
     */
    boolean recoverAll();
    /**
     * 查看详情
     * @param id
     * @return TsConfigInfoEntity
     */
    TsConfigInfoEntity getConfigInfo(Long id);

    /**
     * 根据配置编码获取配置信息
     * @param code
     * @return
     */
    List<TsConfigInfoEntity> getConfigInfoByCode(String code);

    /**
     * 根据用户组织获取配置信息
     * @param query
     * @return TsConfigInfoEntity
     */
    List<TsConfigInfoEntity> getConfigInfoByOrg(ConfigInfoOrgQuery query);

    /**
     * 根据组织id获取配置信息
     * @param orgId
     * @return
     */
    List<TsConfigInfoEntity> getConfigInfoByOrgId(Long orgId);

    /**
     * 根据用户获取配置信息
     * @param query
     * @return TsConfigInfoEntity
     */
    List<TsConfigInfoEntity> getConfigInfoByMember(ConfigInfoMemberQuery query);

    /**
     * 根据用户id获取配置信息
     * @param memberId
     * @return
     */
    List<TsConfigInfoEntity> getConfigInfoByMemberId(Long memberId);

    /**
     * 获取系统配置的统一调用接口
     * @param memberId
     * @param orgId
     * @param code
     * @return
     */
    ConfigRespVO getConfigByCode(Long memberId, Long orgId, String code);

    /**
     * 获取用户可配置的配置信息
     * @return
     */
    List<MemberConfigVO> getConfigurableByMember(PersonConfigInfoQuery query);

    /**
     * 获取用户可配置的配置信息详情
     * @param code
     * @return
     */
    ConfigRespVO getDetail( String code);

}
